//导包
const express = require('express');
const bodyParser = require('body-parser');
const multer = require('multer');
const db = require('./utils/db')


//创建服务器
const app = express();
// const app=express()

//创建上传组件,并且指定用来保存上传文件的路径
const upload = multer({
    dest: './web/uploads/'
})

//中间件\
//暴露 静态文件
app.use(express.static('web'));
//注册bodyParser中间件
app.use(bodyParser.urlencoded({
    extended: false
}))
app.use(bodyParser.json())


//路由
//注册登录 的路由接口
app.post('/login', (req, res) => {
    //  准备响应消息
    //  let msgObj={
    //      code:200,
    //      msg:'登录成功'
    //  }
    let msgObj = getMsgData(200, '登录成功');
    if (req.body.username != 'admin' || req.body.password != '123456') {
        msgObj.code = 400;
        msgObj.msg = '用户名或密码错误'
    }
    res.send(msgObj)

})

// 注册英雄列表路由
app.get('/list', (req, res) => {

    // let backData={
    //     code:200,
    //     msg:'获取成功',
    //     data:[],
    // };
    let backData = getMsgData(200, '获取成功');

    let heroList = db.getHeros();
    if (heroList != null && heroList.length > 0) {
        backData.data = heroList;
    } else {
        backData.code = 201;
        backData.msg = '对不起,没有数据';
    }

    res.send(backData)
})

//新增 英雄新增 路由
app.post('/add', upload.single('icon'), (req, res) => {

    let msgData = getMsgData(201, '增加数据成功');

    //校验数据
    if (req.body.name==''||req.body.skill==''||req.file == undefined) {
        msgData.code=407;//设置一个状态码 返回浏览器数据 有误
        msgData.msg='输入数据有缺失,请检查';

    }else{
        let addData = {
            name: req.body.name,
            skill: req.body.skill,
            icon: req.file.filename,
        }
    
        //将对象提交到db.js中
        let isOk = db.addHero(addData);
        
        if (!isOk) {
            msgData.msg = '参数错误';
            msgData.code = 400;
        }
    }

    res.send(msgData)

})
//封装 响应数据
function getMsgData(code = 200, msg = '成功', data = null) {
    return {
        code,
        msg,
        data,
    };
};

// 删除英雄 路由
app.post('/delete', (req, res) => {
    //获取请求报文 要删除的英雄id
    let heroId = req.body.id;

    //调用db中方法
    let isOk = db.deleteHeroById(heroId)
    //返回响应数据
    let msgData = getMsgData(202, '删除英雄成功')

    if (!isOk) {
        msgData.code = 400;
        msgData.msg = '参数错误';
    };

    res.send(msgData);

})

//查询英雄
app.get('/search', (req, res) => {
    //获取url后面的传递的id
    let heroId = req.query.id;
    //调用db.js 的查询英雄方法
    let heroObj = db.getHeroById(heroId);
    //准备消息,发送结果给浏览器
    let msgData = getMsgData(200, '查询成功', heroObj);
    if (heroObj == null) {
        msgData.code = 400;
        msgData.msg = '参数错误'
    }

    res.send(msgData)
})

//修改英雄 路由

app.post('/edit', upload.single('icon'), (req, res) => {
    //获取数据
    let editData = {
        id: req.body.id,
        skill: req.body.skill,
        name: req.body.name,
        icon: req.file?req.file.filename:'',//文件没有修改的情况下,修改数据也是可以的
    }
    //提交给db.js修改
    let isOk = db.editHero(editData);
    //准备消息,返回给浏览器
    let msgData = getMsgData(203, '修改成功')
    if (!isOk) {
        msgData.code = 400;
        msgData.msg = '参数错误'
    }

    res.send(msgData)
})



//启动服务器
const PORT = 3500;
app.listen(PORT, (err) => {
    if (err == null) {
        console.log('启动 【英雄项目】服务器成功：' + PORT);

    } else {
        console.log('启动失败:' + err.message);

    }
})